package com.zhu.transaction.service.imp;

import com.zhu.transaction.mapper.UserMapper;
import com.zhu.transaction.mapper.imp.UserMapperImp;
import com.zhu.transaction.pojo.User;
import com.zhu.transaction.pojo.state.BackState;
import com.zhu.transaction.service.UserService;
import com.zhu.transaction.utils.MyUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

/**
 * @author Zhu
 * @createtime 2021/1/7-21:31
 */
@Service
public class UserServiceImp implements UserService {

    @Autowired
    UserMapperImp userMapper;

    /**
     * 用户注册
     *
     * @param user 用户信息
     * @return 注册结果
     */
    @Override
    public BackState register(User user) {
        User userTmp = userMapper.queryUserByPhone(user.getUsername());
        //如果可以查询到此用户名的用户，说明该用户已经注册过
        if (userTmp != null) {
            return BackState.HAS_EXIST;
        } else {
            user.setId(MyUtils.getRandomID()).setRegisterTime(new Date()).setUpdateTime(new Date())
                    .setPassword(MyUtils.string2MD5(user.getPassword())).setPhone(user.getUsername())
                    .setAvatar("https://zhu-campus.oss-cn-beijing.aliyuncs.com/avatar/avatar.jpg");
            int result = userMapper.addUser(user);
            return result > 0 ? BackState.SUCCESS : BackState.ERROR;
        }
    }

    /**
     * 用户登录
     *
     * @param username 用户名
     * @param password 密码
     * @return 登录结果
     */
    @Override
    public User login(String username, String password) {
        password = MyUtils.string2MD5(password);
        return userMapper.queryUserByUsernameAndPassword(username, password);
    }

    /**
     * 获取用户信息
     *
     * @param phone 用户电话号码
     * @return 用户实体
     */
    public User getOneUserByPhone(String phone) {
        return userMapper.queryUserByPhone(phone);
    }

    /**
     * 获取用户详细信息
     *
     * @param userID 用户ID
     * @return 用户信息
     */
    public User getOneUserById(String userID) {
        return userMapper.queryUserByID(userID);
    }

    /**
     * 更新用户信息
     *
     * @param user 用户信息
     * @return sql执行影响行数
     */
    @Override
    public int updateUserInfo(User user) {
        return userMapper.updateUserInfo(user);
    }

    /**
     * 更新用户类型
     *
     * @param userId 用户Id
     * @param type   类型（0:普通用户；1:管理员）
     * @return 更新结果
     */
    @Override
    public BackState updateUserType(String userId, Integer type) {
        return userMapper.updateUserType(userId, type) > 0 ? BackState.SUCCESS : BackState.ERROR;
    }

    /**
     * 更新用户账号状态
     *
     * @param userId 用户Id
     * @param type   类型（0:正常；1:被冻结）
     * @return 更新结果
     */
    @Override
    public BackState updateUserState(String userId, Integer type) {
        return userMapper.updateUserState(userId, type) > 0 ? BackState.SUCCESS : BackState.ERROR;
    }

    /**
     * 获取用户信息
     *
     * @param isAdminUser true：获取管理员信息；false：获取所有不是管理员的信息
     * @return 用户列表
     */
    @Override
    public List<User> getAdminUser(Boolean isAdminUser) {
        return userMapper.queryAllUser(isAdminUser);
    }
}
